package main

import (
	"log"
	"os"
	"os/exec"
	"syscall"
)

/*
exec 函数族就提供了一个在进程中启动另一个程序执行的方法。不会替换当前进程。这个不是Linux exec系列的系统调用！
*/

/*
在clone函数调用时会创建一个新的进程,且传入命名空间参数,根据CLONE_NEWUTS参数可以隔离nodename和hostname等
*/
func main() {
	// 创建了一个子进程 sh，同时传入了一些参数
	log.Println(os.Getpid())
	cmd := exec.Command("sh")
	log.Println(os.Getpid())
	cmd.SysProcAttr = &syscall.SysProcAttr{
		Cloneflags: syscall.CLONE_NEWUTS,
	}
	cmd.Stdin = os.Stdin
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr

	if err := cmd.Run(); err != nil {
		log.Fatal(err)
	}
}
